<!DOCTYPE html>
<html>
<head>
	<meta charset="utf-8">
	<title>发布订阅模式</title>
</head>
<body>
发布订阅模式指的是希望接收通知的对象（Subscriber）基于一个主题通过自定义事件订阅主题，被激活事件的对象（Publisher）通过发布主题事件的方式通知各个订阅该主题的 Subscriber 对象。
<script>
// 控制中心
let pubSub = {
	subs: {},
	// 订阅
  	on: function(key, fn) {
  		if(!this.subs[key]) {
  			this.subs[key] = [];
  		}
  		this.subs[key].push(fn);
  	},
  	//取消订阅
  	off: function(key) {
  		delete this.subs[key];
  	},
  	// 发布
  	emit: function(key, ...args) {
  		let list = this.subs[key];
  		if(list) {
  			for(let i = 0; i < list.length; i++) {
  				list[i](...args);
  			}
  		}
  	},
};
</script>
<script>
//测试
pubSub.on('aa', (x, y) => {
	console.log('aa:', x, y);
});
pubSub.on('bb', (x, y) => {
	console.log('bb:', x, y);
})
pubSub.emit('aa', 11, 13);//aa: 11 13
pubSub.emit('bb', 33, 35);//bb: 33 35
pubSub.off('aa');
console.log(pubSub);
</script>
</body>
</html>